package work.shenzhen;

import static java.lang.System.out;

import java.io.File;

import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.text.StrTokenizer;
import org.apache.log4j.Logger;

/**
 * @Title: ShenZhenBase.java
 * @Description: TODO(处理深圳的国外数据，平台数据对应，基础类)
 * @author H819
 * @date 2010-6-8
 * @version V1.0
 */

// 字典表：
// 标准状态：(stdstate)
// A 现行有效
// W 作废
// N 未生效
//
// 采用关系：(cybz)
// IDT 等同
// EQ 等于
// EQV 等效
// MOD 修改
// NEQ 非等效
// REF 参照
//
// 正文语种：(language)
// ZH 中文
// EN 英文
// FR 法文
// DE 德文
// JA 日文
// EF 英法双语
// EFR 英法俄三语
//
// 代替关系：(tdbz,btdbz)
// PS 部分代替
// CS 调整(转号)
// SS 全部代替(标准号前不带字符，即为全部代替)
//
// 修改件：(xgj)
// AMD 增补
// ANN 附件
// APP 附录
// AUS 选择
// BUL 公告
// COF 确认
// COR 勘误
// ERR 排版勘误
// EXP 说明
// INT 解释
// REV 修订
// SUP 补充

public class ShenZhenBaseGW {

	private Logger log = Logger.getLogger(ShenZhen.class);

	/**
	 * 处理深圳的 "被代替标准号" 和 "被代替标准号"
	 * 
	 * @param stdcode
	 * @return
	 */
	public String getUpdateDtbzCode(String stdcode) {

		// 字母含义：
		// PS 部分代替
		// CS 调整(转号)
		// SS 全部代替(标准号前不带字符，即为全部代替)

		//
		// 深圳的 "被代替标准号" 和 "被代替标准号"这两个字段的格式是一样的
		//
		// === "代替标准和被代替标准号" 的规范： ===
		// 原标准 ：GB/T 4239-1991
		// 1. 深圳代替标准的写法： PS GB/T 3280-2007;PS GB/T 4238-2007
		// 2. 深圳被代替标准的写法：PS GB/T 2598-1981;SS GB/T 4239-1984

		// 整理之后，变成形如 GB/T 2598-1981(部分代替);GB/T 4239-1984(全部代替)

		// 国外标准和国内标准，深圳标注方法相同

		if (stdcode == null || stdcode.equals(""))
			return null;

		String real_btdbz = "";

		// 处理被代替标准号

		// 单个标准号
		// System.out.println(bzh.contains(";"));
		stdcode = StringUtils.removeEnd(stdcode, ";");
		stdcode = stdcode.toUpperCase().trim();

		// 多个标准号
		StrTokenizer stoken = new StrTokenizer(stdcode.trim(), ";");

		// 开始逐个处理的标准号
		for (int i = 0; i < stoken.getTokenArray().length; i++) {

			String temptoken = "";
			temptoken = (String) stoken.getTokenArray()[i];
			// log.info("token " + i + " :" + temptoken);

			// 国外标准，标准号后面有的有"."，去掉
			temptoken = StringUtils.removeEnd(temptoken, ".");

			// 去掉括号
			if (temptoken.endsWith(")")) {
				temptoken = StringUtils.substringBefore(temptoken, "(").trim();
				log.info("temptoken has () :" + temptoken);
			}

			// SS 情况
			if (temptoken.startsWith("SS")) {
				temptoken = StringUtils.removeStart(temptoken, "SS").trim();
				// log.info("temptoken has SS :" + temptoken);

				real_btdbz = real_btdbz + temptoken + ";";
				continue;

			}

			// CS 情况
			else if (temptoken.startsWith("CS")) {
				temptoken = StringUtils.removeStart(temptoken, "CS").trim();
				// log.info("temptoken has CS :" + temptoken);
				real_btdbz = real_btdbz + temptoken + "(标准号调整);";
				continue;
			}

			// PS 情况
			else if (temptoken.startsWith("PS")) {
				temptoken = StringUtils.removeStart(temptoken, "PS").trim();
				// log.info("temptoken has PS :" + temptoken);

				real_btdbz = real_btdbz + temptoken + "(部分代替);";
				continue;

			} else {// 其他的情况
				temptoken = temptoken.trim();
				// log.info("temptoken has other :" + temptoken);

				real_btdbz = real_btdbz + temptoken + ";";
				continue;
			}
		}

		real_btdbz = StringUtils.removeEnd(real_btdbz, ";");

		// 被标准号处理完毕
		return real_btdbz;
	}

	/**
	 * 处理语言代码
	 * 
	 * @param languageCode
	 * @return
	 */
	public String getUpdateLanguageCode(String languageCode) {

		// 如无标注，默认为英文
		if (languageCode == null || languageCode.equals(""))
			return "ENGLISH";

		else if (languageCode.equals("ZH"))
			return "CHINESE";

		else if (languageCode.equals("EN"))
			return "ENGLISH";

		else if (languageCode.equals("FR"))
			return "FRENCH";

		else if (languageCode.equals("DE"))
			return "GERMAN";

		else if (languageCode.equals("JA"))
			return "JAPANESE";

		else if (languageCode.equals("EF"))
			return "ENGLISH & FRENCH";

		else if (languageCode.equals("EFR"))
			return "ENGLISH & FRENCH & RUSSIAN";

		else
			return languageCode;

	}

	/**
	 * 处理状态字段
	 * 
	 * @param stateCode
	 * @return
	 */
	public String getUpdateStateCode(String stateCode) {

		if (stateCode == null || stateCode.equals("A") || stateCode.equals("N"))
			return "YX";

		else if (stateCode.equals("W"))
			return "FZ";

		else
			return stateCode;

	}

	/**
	 * 处理 采标字段 字段
	 * 
	 * @param cybzCode
	 * @return
	 */
	public String getUpdateCybzCode(String cybzCode) {

		if (cybzCode == null)
			return null;

		// 暂时不做处理，直接写入采标标准号字段

		return cybzCode;

	}

	/**
	 * 处理文件路径。深圳导入国外标准，暂时入 IB2
	 * 
	 * @param textAddress
	 *            自定义的文件路径
	 * @return
	 */

	public String getUpdateTextAddress(String textAddress) {

		if (textAddress == null)
			return null;

		if (textAddress.startsWith("JJF") | textAddress.startsWith("JJG"))
			return "Work/GN/" + textAddress.replace('\\', '/');

		else if (textAddress.startsWith("DB33"))
			return "Work/DB/" + textAddress.replace('\\', '/');

		else
			// 补全路径
			return "Work/IB2/" + textAddress.replace('\\', '/');

	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		String dtbz0 = "BS EN 1515-1-2000";
		// String dtbz1 =
		// "3397-1976;PS GB/T 2598-1981;SS GB/T 4239-1984;CS GB/T 4239-2000;";

		ShenZhenBaseGW szb = new ShenZhenBaseGW();
		out.println(szb.getUpdateDtbzCode(dtbz0));
		// out.println(szb.getUpdateDtbzCode(dtbz1));

	}

}
